package com.example;

import java.security.MessageDigest;

/**
 * 工具类 用于生客户端请求签名
 *
 **/
public class SignUtil {

    /**
     * 安卓客户端指纹签名值
     */
    public static final String ANDROID_SIGNATURE = "bd4f73255889dc53e875c026bfb22fe3";

    /**
     * 安卓客户端指纹签名值(debug版本)
     */
    public static final String ANDROID_DEBUG_SIGNATURE = "1d2a050679c495fa1aeab942edc71036";

    /**
     * 安卓MD5秘钥
     */
    public static final String ANDROID_MD5_KEY = "SchedUle==--.3.xxandrOidxXd";

    /**
     * IOS MD5秘钥
     */
    public static final String IOS_MD5_KEY =  "kksScHEDU..==lEdsiOsdd";

    /**
     * 生成android请求内容签名
     *
     * @param content           客户端请求内容(去掉签名参数的内容)
     * @param androidAppSign    安卓客户端指纹签名值(IOS传null)
     * @param md5Key            MD5秘钥
     * @return
     */
    public static String genAndroidSign(String content, String androidAppSign, String md5Key){
        if(content == null || md5Key == null){
            return null;
        }

        content = content.replace(" ", "").replace("\n", "").trim();
        md5Key = md5Key.trim();

        if(content.equals("") ||  md5Key.equals("")){
            return null;
        }

        return md5Encrypt(content + (androidAppSign == null ? "" : androidAppSign) + md5Key);
    }

    /**
     * 生成ios请求内容签名
     *
     * @param content   客户端请求内容(去掉签名参数的内容)
     * @param md5Key    MD5秘钥
     * @return
     */
    public static String genIosSign(String content, String md5Key){
        return genAndroidSign(content, null, md5Key);
    }

    /**
     * MD5加密
     *
     * @param string
     * @return
     */
    private static String md5Encrypt(String string){

        String s = null;
        if (string==null||"".equals(string)) {
            return string;
        }
        byte[] b;
        StringBuilder sBuilder = new StringBuilder();
        try {
            b = string.getBytes("UTF-8");
            MessageDigest mDigest = MessageDigest.getInstance("MD5");
            mDigest.update(b);
            b = mDigest.digest();

            for (byte c : b) {
                s = Integer.toHexString(c&0xff);
                if (s.length()<2) {
                    sBuilder.append("0");
                }
                sBuilder.append(s);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return sBuilder.toString();
    }

    public static void main(String[] args){
        String content = "{'a':'x','b':'y','c':'z'}"; // 客户端发送过来的内容

        // android正式版签名
        String androidSign = genAndroidSign(content, ANDROID_SIGNATURE, ANDROID_MD5_KEY);

        // android debug版签名
        String androidDebugSign = genAndroidSign(content, ANDROID_DEBUG_SIGNATURE, ANDROID_MD5_KEY);

        // IOS签名
        String iosSign = genIosSign(content, IOS_MD5_KEY);

        // 打印结果
        System.out.println("android正式版签名:" + androidSign
                + "\nandroid debug版签名:" + androidDebugSign
                + "\nIOS签名:" + iosSign);
    }

}

